#include "KgLogFile.h"
#include <QDir>
#include <QTime>
#include <QCoreApplication>
//extern  stuControl_Cfg  g_ControlCfg;

KgLogFile::KgLogFile()
{
	//m_bIsLogSave = FALSE;
	//m_bCmdWindowOpen = FALSE;
	m_bCreateSuc = false;
}

KgLogFile::~KgLogFile()
{
	if(m_bCreateSuc)
		m_file.close();
}

void KgLogFile::createlogfile(QString fileName)
{
    // 获取应用程序的目录路径
    m_strPath = QCoreApplication::applicationDirPath();
    // 拼接日志文件名
    m_strPath += "/" + fileName;
    // 设置日志文件路径和文件名
    m_file.setFileName(m_strPath);

    // 如果成功打开日志文件
    if(m_file.open(QIODevice::ReadWrite | QIODevice::Append))
    {
        // 创建成功
        m_bCreateSuc = true;
        // 打印日志文件路径
        printf("open log success %s\n", m_strPath.toStdString().c_str());
        // 返回
        return;
    }

    // 如果成功以只写方式打开日志文件
    if(m_file.open(QIODevice::WriteOnly))
    {
        // 创建成功
        m_bCreateSuc = true;
        // 打印日志文件路径
        printf("open log success %s\n", m_strPath.toStdString().c_str());
    }
}

int KgLogFile::fileSize()
{
   int size = 0;
   
   if (m_bCreateSuc)
   	{ 
   	   size = m_file.size();
   	}

   return size;
}

void KgLogFile::close()
{
    m_file.close();
}

void  KgLogFile::writelogfile(QString strInfo)
{   
    // 如果需要保存日志且创建成功
    if(/*m_bIsLogSave &&*/ m_bCreateSuc)
    {
        // 如果文件大小超过30MB，则直接返回
        if (m_file.size() >= 1024*1024*30)
        {
            return;
        }
        
        // 上锁以确保日志的写入顺序
        m_criticfile.lock();
        
        // 获取当前时间和文件名以及行号
        QDateTime CurrentDateTime=QDateTime::currentDateTime();
        QString   str = CurrentDateTime.toString("yyyy-MM-dd hh:mm:ss.zzz ");
        
        // 将时间和文件名以及行号拼接到日志信息中
        strInfo = str+ strInfo+"\r\n";
        
        // 写入日志到文件中
        m_file.write(strInfo.toLocal8Bit());
        m_file.flush();
        
        // 解锁
        m_criticfile.unlock();
    }
}
